package `object`

import java.util.function.BinaryOperator
import java.util.function.IntBinaryOperator

/**
 *   @author
 *   @description
 *   @datetime 2021/6/16 13:09
 *
 */
class EnumDemo {
}
// 枚举类
enum class Direction {
    NORTH, SOUTH, WEST, EAST
}

// 初始化 因为每⼀个枚举都是枚举类的实例，所以他们可以是这样初始化过的
enum class Color(val rgb: Int) {
    RED(0XFF0000),
    GREEN(0X00FF00),
    BLUE(0X0000FF)
}

enum class ColorColor(val rgb: Int, val v: Int) {
    RED(0XFF0000, 1),
    GREEN(0X00FF00, 2),
    BLUE(0X0000FF, 3)
}

// 匿名类 枚举常量还可以声明其带有相应⽅法以及覆盖了基类⽅法的匿名类
// 如果枚举类定义任何成员，那么使⽤分号将成员定义中的枚举常量定义分隔开
enum class ProtocolState {
    WAITING {
        override fun signal() = TALKING
    },
     TALKING {
         override fun signal() = WAITING
     };

    abstract fun signal(): ProtocolState
}

// 在枚举类中实现接⼝
// ⼀个枚举类可以实现接⼝（但不能从类继承），可以为所有条⽬提供统⼀的接⼝成员实现，也可以在相应
// 匿名类中为每个条⽬提供各⾃的实现。只需将接⼝添加到枚举类声明中即可
enum class InArithmetics: BinaryOperator<Int>, IntBinaryOperator {
    PLUS {
        override fun apply(t: Int, u: Int): Int {
            return t + u
        }
    },
    TIMES {
        override fun apply(t: Int, u: Int) = t * u
    };

    override fun applyAsInt(left: Int, right: Int): Int {
        return apply(left ,right)
    }
}

